package com.eastfair.messagecenter.point;

import com.eastfair.core.point.PointBuilder;
import com.eastfair.messagecenter.ContentModel;
import com.eastfair.messagecenter.enumeration.ChannelType;
import com.eastfair.messagecenter.enumeration.MsgContentType;
import com.eastfair.messagecenter.enumeration.MsgType;
import com.eastfair.point.PointKeyDefinition;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;

/**
 * 预发送消息服务 埋点
 * 业务向服务方发送消息
 */
@Data
//@Builder
public class ReadySendPoint implements PointBuilder, Serializable {
    /**
     * 业务Id(数据追踪使用)
     */
    private String businessId;


    /**
     * 业务类型，由业务方自己定
     */
    private String businessType;

    /**
     * 消息类型
     * #MsgType{WAIT:待办;NOTIFY:通知;PUBLICITY:公告;WARN:预警;}
     */
    private MsgType msgType;

    /**
     * 消息内容类型
     * #MsgContentType{SYSTEM:系统消息;BUSINESS:业务消息;OPERATION:运营消息;}
     */
    @ApiModelProperty(value = "消息内容类型")
    private MsgContentType msgContentType;


    /**
     * 发送用户id
     */
    @ApiModelProperty(value = "发送用户id")
    private Set<Long> senUserIdList;

    /**
     * 发送手机号
     */
    @ApiModelProperty(value = "发送手机号")
    private Set<String> sendMobileList;


    /**
     * 发送组织id
     */
    @ApiModelProperty(value = "发送组织id")
    private Set<Long> orgIdList;

    /**
     * 发送给全体用户
     */
    @ApiModelProperty(value = "发送给全体用户")
    private Boolean isSendAll;


    /**
     * 发送渠道类型枚举  INNER_IM:站内信,SMS:短信,EMAIL:邮件
     */
    @ApiModelProperty(value = "发送渠道类型")
    private ChannelType channelType;
    /**
     * 是否立即发送 1是 0否
     */
    @ApiModelProperty(value = "是否立即发送 1是 0否")
    private Integer isSendNow;

    /**
     * 预计发送时间
     */
    @ApiModelProperty(value = "预计发送时间")
    private LocalDateTime predictSendTime;
    /**
     * 发送内容集合
     */
    @ApiModelProperty(value = "发送内容集合")
    private List<ContentModel> contentModelList;

    @Override
    public String getPointName() {
        return PointKeyDefinition.MESSAGE_READY_SEND_POINT;
    }
}
